﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos
Public Class VendedoresBL

    Public Function RegistrarVendedor(ByVal TokenConexion As String, ByVal Vendedor As VendedoresBE, ByRef detResp As DetalleRespuesta) As Boolean
        Dim vendDAL As VendedoresDAL = New VendedoresDAL("")
        detResp.Mensajes = ""
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Registrar, Vendedor, detResp.Mensajes)) Then
                vendDAL = New VendedoresDAL(TokenConexion)
                If (vendDAL.existeVendedor(Vendedor.Clave)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_PreviamenteRegistrado,
                                             "Existe un registro con la Clave del Vendedor indicado." & vbCrLf & detResp.Mensajes)
                    Return False
                Else
                    If (vendDAL.registraVendedor(Vendedor)) Then
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                                 "El Vendedor se registro con éxito.")
                        Return True
                    Else
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                                 "El Vendedor no pudo ser registrado en el sistema." & vbCrLf & detResp.Mensajes)
                        Return False
                    End If
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El Vendedor no es valido para registrar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "VendedoresBL.RegistrarVendedor")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al registrar el Vendedor: " & ex.Message)
            Return False
        Finally
            vendDAL = Nothing
        End Try
    End Function

    Private Function EsValidoPara(ByVal operacion As Enumeraciones.operacionesCatalogos, ByRef Vendedor As VendedoresBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (operacion = Enumeraciones.operacionesCatalogos.Actualizar) Then
                If (String.IsNullOrEmpty(Vendedor.IdVendedor)) Then
                    mensaje &= "El Id del Vendedor es requerido." & vbCrLf
                Else
                    If (Vendedor.IdVendedor <= 0) Then
                        mensaje &= "El Id de la Moneda debe ser mayor a 0 y estar previamente registrado." & vbCrLf
                    End If
                End If
            End If

            If (String.IsNullOrWhiteSpace(Vendedor.Clave)) Then
                mensaje &= "La clave del Vendedor es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                Vendedor.Clave = Vendedor.Clave.Trim
                If (Vendedor.Clave.Length > 20) Then
                    Vendedor.Clave = Vendedor.Clave.Substring(0, 20)
                End If
            End If

            If (String.IsNullOrWhiteSpace(Vendedor.Nombre)) Then
                mensaje &= "El nombre del Vendedor es obligatorio, no puede ir el campo vacio." & vbCrLf
            Else
                Vendedor.Nombre = Vendedor.Nombre.Trim
                If (Vendedor.Nombre.Length > 255) Then
                    Vendedor.Nombre = Vendedor.Nombre.Substring(0, 255)
                End If
            End If

            If (Vendedor.PorcComision = Nothing) Then
                Vendedor.PorcComision = 0
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "VendedoresBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaVendedor(ByVal TokenConexion As String, ByVal Vendedor As VendedoresBE, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim vendDAL As VendedoresDAL = New VendedoresDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Actualizar, Vendedor, detResp.Mensajes)) Then
                vendDAL = New VendedoresDAL(TokenConexion)
                If (vendDAL.actualizaVendedor(Vendedor, detResp.Mensajes)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Datos del Vendedor Actualizados.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de Datos del Vendedor." & vbCrLf &
                                             "Verifique que la Clave del Vendedor esté registrada en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                     "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "VendedoresBL.ActualizaVendedor")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar Vendedor: " & ex.Message)
            Return False
        Finally
            vendDAL = Nothing
        End Try
    End Function

    Public Function GetVendedorByClave(ByVal tokenConexion As String, ByVal Clave As String, ByRef detResp As DetalleRespuesta) As VendedoresBE
        detResp.Mensajes = ""
        Dim vendDAL As VendedoresDAL = New VendedoresDAL("")
        Dim vendBE As VendedoresBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetVendedorByClave(Clave, detResp.Mensajes)) Then
                vendDAL = New VendedoresDAL(tokenConexion)
                vendBE = vendDAL.getVendedorByClave(Clave)
                If (vendBE IsNot Nothing) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                         "Se obtuvo la información del Vendedor con éxito.")
                    Return vendBE
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                         "No se obtuvo la información del Vendedor" & vbCrLf & detResp.Mensajes)
                    Return Nothing
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La clave del vendedor proporcionado contiene valor invalido " & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "VendedoresBL.GetVendedorByClave")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener información del Vendedor: " & ex.Message)
            Return Nothing
        Finally
            vendDAL = Nothing
            vendBE = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetVendedorByClave(ByRef Clave As String, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrEmpty(Clave)) Then
                mensaje &= "El campo Clave del Vendedor no puede ir vacio." & vbCrLf
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "VendedoresBL.EsValidoParaGetVendedorByClave")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Private Function EsValidoParaGetVendedorById(ByRef id As Integer, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrEmpty(id)) Then
                mensaje &= "El campo Id del Vendedor no puede ir vacio." & vbCrLf
            Else
                If (id <= 0) Then
                    mensaje &= String.Format("El ID <{0}> del Vendedor debe ser un valor mayor a 0", id) & vbCrLf
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "VendedoresBL.EsValidoParaGetVendedorById")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetListadoVendedores(ByVal tokenConexion As String, ByVal Nombre As String, ByVal tipoEstatus As Enumeraciones.estatusParaBusquedas,
                                         ByVal pRegistroInicial As Integer, ByVal pPageSize As Integer,
                                         ByVal pSortColumn As Enumeraciones.campoOrdenamiento, ByVal pSortDirection As Enumeraciones.tipoOrdenamiento,
                                         ByRef pTotalRegistros As Integer,
                                         ByRef detResp As DetalleRespuesta) As List(Of VendedoresBE)
        detResp.Mensajes = ""
        pTotalRegistros = 0
        Dim vendDAL As VendedoresDAL = New VendedoresDAL("")
        Dim listvendBE As List(Of VendedoresBE)
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            vendDAL = New VendedoresDAL(tokenConexion)
            listvendBE = vendDAL.getlistadoVendedores(Nombre, tipoEstatus, pRegistroInicial, pPageSize, pSortColumn, pSortDirection, pTotalRegistros)
            If (listvendBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                         "Se obtuvo el listado de Vendedores con éxito.")
                Return listvendBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoObtuvoRegistrosParaListado,
                                         "No se obtuvo el listado de Vendedores" & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "VendedoresBL.GetListadoVendedores")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener el listado de Vendedores: " & ex.Message)
            Return Nothing
        Finally
            vendDAL = Nothing
            listvendBE = Nothing
        End Try
    End Function

    Function CambiaEstatusVendedor(ByVal tokenConexion As String, ByVal IdVendedor As Integer, ByVal setActivo As Boolean, ByVal detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim vendDAL As VendedoresDAL = New VendedoresDAL("")
        Try
            If (EsValidoParaGetVendedorById(IdVendedor, detResp.Mensajes)) Then
                vendDAL = New VendedoresDAL(RijndaelSimple.desencriptaDefault(tokenConexion))
                If (vendDAL.actualizaEstatusVendedor(IdVendedor, setActivo)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Estatus del Vendedor Actualizado.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de estatus del Vendedor." & vbCrLf &
                                             "Verifique que el Id del Vendedor esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "MonedaBL.CambiaEstatusVendedor")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar estatus del Vendedor: " & ex.Message)
            Return False
        Finally
            vendDAL = Nothing
        End Try
    End Function

    Public Function GetVendedorById(ByVal tokenConexion As String, ByVal Id As String, ByRef detResp As DetalleRespuesta) As VendedoresBE
        detResp.Mensajes = ""
        Dim vendDAL As VendedoresDAL = New VendedoresDAL("")
        Dim vendBE As VendedoresBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetVendedorById(Id, detResp.Mensajes)) Then
                vendDAL = New VendedoresDAL(tokenConexion)
                vendBE = vendDAL.getVendedorById(Id)
                If (vendBE IsNot Nothing) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                         "Se obtuvo la información del Vendedor con éxito.")
                    Return vendBE
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                         "No se obtuvo la información del Vendedor" & vbCrLf & detResp.Mensajes)
                    Return Nothing
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El Id del vendedor proporcionado contiene valor invalido " & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "VendedoresBL.GetVendedorById")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener información del Vendedor: " & ex.Message)
            Return Nothing
        Finally
            vendDAL = Nothing
            vendBE = Nothing
        End Try
    End Function

End Class
